<?php

// LVM
//@session_start();

class VitrineFrontController extends ModuleFrontController {

	protected function isConnected()
	{
		$customer = Context::getContext()->customer;
		
		if ( $customer == null || $customer->id == null )
			return false;
		else
			return true;
	}
	
	protected function loginAsCustomer()
	{
		// LVM
		//@session_start();

		if ( !isset($_SESSION) )
		{
			session_start();
			//echo 'ici567'.'---';
		}
		
		//var_dump(Context::getContext());
		
		//$_SESSION = Context::getContext()->session;
		
		//$id_customer2 = Context::getContext()->smarty->id_customer2;
		//$adminKey2 = Context::getContext()->smarty->adminKey2;
		
		//echo 'id_customer2 = '.$id_customer2.'---';
		//echo 'adminKey2 = '.$adminKey2.'---';
		
		// $_SESSION est effacée !!
		// LVM : $_SESSION est effacée pendant le trajet... raison inconnue.
		//       Le comportement est aléatoire selon les jours, le navigateur, la météo, ...	
		//var_dump($_SESSION);
		//var_dump($_GET);
		//var_dump($_COOKIE);
		
		if (isset($_GET['id_customer']))
		{
			// Décryptage de la donnée
			$cle_crypt = 'unjoursansfin1234';
			
			//echo 'url decode string = '.urldecode($_GET['id_customer']).'---';
			
			$data_decrypt = $this->f_decrypt($cle_crypt, urldecode($_GET['id_customer']));
			
			//echo 'data_decrypt = '.$data_decrypt.'---';
		}
        
		//exit;
		
		/*
		// Clef de cryptage
		$cle_crypt = 'unjoursansfin1234';
		
		$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
		$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
		
		echo 'iv_size = '.$iv_size.'---';
		echo 'iv = '.$iv.'---';
		echo 'MCRYPT_RAND = '.MCRYPT_RAND.'---';
		
		
		//exit;
		
		// Data à décrypter
		if (isset($_GET['id_customer']))
		{
			$data_crypt_sans_caractere_speciaux = urldecode($_GET['id_customer']);
			//$data_crypt = urldecode($_GET['id_customer']);
			
			echo 'data_crypt_sans_caractere_speciaux urldecode = '.$data_crypt_sans_caractere_speciaux.'---';
			
			$data_crypt = base64_decode($data_crypt_sans_caractere_speciaux);
			
			echo 'data_crypt = '.$data_crypt.'---';
			
			$data_decrypt = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $cle_crypt, $data_crypt, MCRYPT_MODE_ECB, $iv);	
			
			echo 'data_decrypt = '.$data_decrypt.'---';
		}
		*/
		
		
		/*		
		if ( 	isset($_SESSION['adminKey']) && 
				isset($_SESSION['id_customer']) && 
				isset($_GET['loginAsCustomer']) && 
				(int)($_GET['loginAsCustomer']) == 1 && 
				$_SESSION['adminKey'] == Configuration::get('fichevitrine_adminKey_')
		)
		*/
		if (isset($_GET['loginAsCustomer']) && (int)($_GET['loginAsCustomer']) == 1)
		/*
		if ( 	isset($_COOKIE['adminKey']) && 
				isset($_COOKIE['id_customer']) && 
				isset($_GET['loginAsCustomer']) && 
				(int)($_GET['loginAsCustomer']) == 1 && 
				$_COOKIE['adminKey'] == Configuration::get('fichevitrine_adminKey_')
		)
		*/
		{
			$cookie = Context::getContext()->cookie;
			
			// LVM
			//$customer = new Customer((int)($_SESSION['id_customer']));
			//$customer = new Customer((int)($_GET['id_customer']));
			$customer = new Customer((int)($data_decrypt));
			//$customer = new Customer((int)($_COOKIE['id_customer']));
			//exit;
			
			$cookie->id_customer = intval($customer->id);
			$cookie->customer_lastname = $customer->lastname;
			$cookie->customer_firstname = $customer->firstname;
			$cookie->logged = 1;
			$cookie->passwd = $customer->passwd;
			$cookie->email = $customer->email;
			
			// LVM : il faut enregistrer le fait que l'on a ouvert le compte
			//       en passant par loginAsCustomer afin de pouvoir ouvrir un compte
			//       même si la date est dépassée... en supposant que la session ne va pas être écrasée ici...
			// sinon utiliser : Context::getContext()->loginAsCustomer = 1; ?
			//$_SESSION['loginAsCustomer'] = 1;
			
			// Comme le $_SESSION ne fonctionne pas...
			$cookie->loginAsCustomer = 1;
			
			Context::getContext()->cookie = $cookie;
			Context::getContext()->customer = $customer;
		}
	}
	
	// LVM
	protected function f_decrypt($private_key, $str_to_decrypt) 
	{
		// LVM : pour que cela fonctionne à tous les coups on enlève le MD5
		//$private_key = md5($private_key);
		
		//echo 'md5 clef crypt = '.$private_key.'---';
		
		$letter = -1;
		$new_str = '';
		
		$strlen = strlen($str_to_decrypt);
		
		//echo 'strlen0 = '.$strlen.'---';
		
		$str_to_decrypt = base64_decode($str_to_decrypt);
		
		$strlen = strlen($str_to_decrypt);
		
		//echo 'strlen = '.$strlen.'---';
		
		for ($i = 0; $i < $strlen; $i++) 
		{
			$letter++;
			
			if ($letter > 31) 
			{
				$letter = 0;
			}
			
			$neword = ord($str_to_decrypt{$i}) - ord($private_key{$letter});
			
			if ($neword < 1)
			{
				$neword += 256;
			}
			
			$new_str .= chr($neword);
		}
		
		return $new_str;
	}

	protected function checkAbo()
	{
		$customer = Context::getContext()->customer;
		$link = new Link();
		$linkModule = $link->getModuleLink('fichevitrine', 'default');
		
		if ($this->isConnected() == false)
			Tools::redirect($linkModule);
		
		$abo = FicheAbo::getFicheAbo($customer->id);
		
		if ($abo == null)
			Tools::redirect($linkModule);
		
		$currentTime = time();
		$endAboTime = strtotime($abo->date_end);
		
		// LVM : il faut pouvoir ouvrir un compte même si la date est dépassée
		//       si il s'agit d'un administrateur (passage par loginAsCustomer)
		//if ($endAboTime < $currentTime)
		//if ($endAboTime < $currentTime || ($_SESSION['loginAsCustomer'] != 1 && isset($_SESSION['loginAsCustomer'])))
		// Tools::redirect($linkModule);
		if ($endAboTime < $currentTime)
		{
			/*
			if (isset($_SESSION['loginAsCustomer']))
			{
				if ($_SESSION['loginAsCustomer'] != 1)
					Tools::redirect($linkModule);
			}
			*/
			$cookie = Context::getContext()->cookie;
			  
            if ($cookie->loginAsCustomer == 1)
            {
				// On reste loggé
			}
			else
			{
				Tools::redirect($linkModule);
			}
		}
					
		return $abo;
	}

}
?>
